#include "stdafx.h"
#include "XEnumConfigAttrImpl.h"

#include <XStrUtil.h>
#include <Util.h>
#include "XConfigAttrImpl.h"

IMPLEMENT_SKIN_CLASS(CXEnumConfigAttrImpl);

//////////////////////////////////////////////////////////////////////////
CXEnumConfigAttrImpl::CXEnumConfigAttrImpl()
{
    m_pNode = NULL;
    m_pCurrentAttr = NULL;
}

CXEnumConfigAttrImpl::~CXEnumConfigAttrImpl()
{
    m_pNode = NULL;
    m_pCurrentAttr = NULL;
}


//////////////////////////////////////////////////////////////////////////
// IXEnumConfigAttr
HRESULT CXEnumConfigAttrImpl::Reset()
{
    m_pCurrentAttr = m_pNode->FirstAttribute();
    return S_OK;
}

HRESULT CXEnumConfigAttrImpl::put_Node(IN XHANDLE hNode)
{
    if(hNode == NULL)
        return E_FAIL;

    m_pNode = (TiXmlElement*)hNode;
    m_pCurrentAttr = NULL;
    Reset();
    return S_OK;
}

HRESULT CXEnumConfigAttrImpl::Next(IXConfigAttr** pData)
{
    if(m_pCurrentAttr == NULL)
    {
        return S_FALSE;
    }
    else
    {
        if((*pData) == NULL)
        {
            (*pData) = XAlloc(CXConfigAttrImpl);
        }

        CXConfigAttrImpl* pConfigAttr = dynamic_cast<CXConfigAttrImpl*>(*pData);
        if(pConfigAttr != NULL)
        {
            pConfigAttr->put_Attr(m_pCurrentAttr);
            m_pCurrentAttr = m_pCurrentAttr->Next();
            return S_OK;
        }
        return E_FAIL;
    }
}
